use std::env;

///
#[derive(Debug, Clone)]
pub struct BmbpArgs {
    // 仓库地址
    pub url: String,
    // 用户名
    pub user: String,
    // 密码
    pub pass: String,
    // 仓库地址
    pub repo: String,
    // 上传命令
    pub exec: String,
    // 本地仓库路径
    pub local: String,
    // 本地仓库类型
    pub local_type: String,
}

impl Default for BmbpArgs {
    fn default() -> Self {
        BmbpArgs {
            url: "".to_string(),
            user: "".to_string(),
            pass: "".to_string(),
            repo: "".to_string(),

            exec: "maven".to_string(),
            local: ".".to_string(),
            local_type: "gradle".to_string(),
        }
    }
}

impl BmbpArgs {
    pub fn new(cmd_args: env::Args) -> Result<BmbpArgs, String> {
        let mut rel_args = BmbpArgs::default();
        for item in cmd_args {
            // 应用命令本身
            if item.ends_with("gup") || item.ends_with("gup.exe") {
                continue;
            }
            if item.starts_with("--") && item.contains("=") {
                let var_split = item.split("=").collect::<Vec<&str>>();
                let (var_name, var_value) = (var_split.get(0).unwrap(), var_split.get(1).unwrap());

                if var_value.is_empty() {
                    return Err(format!("===>请指定参数值[--{}]", var_name));
                }

                match var_name.clone()[2..].to_string().as_str() {
                    "url" => {
                        rel_args.url = var_value.to_string();
                    }
                    "repo" => {
                        rel_args.repo = var_value.to_string();
                    }
                    "user" => {
                        rel_args.user = var_value.to_string();
                    }
                    "pass" => {
                        rel_args.pass = var_value.to_string();
                    }
                    "local" => {
                        rel_args.local = var_value.to_string();
                    }
                    "local_type" => {
                        if var_value.to_lowercase().eq("gradle")
                            || var_value.to_lowercase().eq("maven")
                        {
                            rel_args.local_type = var_value.to_string();
                        } else {
                            println!("==> 设置本地仓库类型无效，默认使用gradle");
                            rel_args.local_type = "gradle".to_string();
                        }
                    }
                    "execute" => {
                        if var_value.to_lowercase().eq("gradle")
                            || var_value.to_lowercase().eq("maven")
                        {
                            rel_args.exec = var_value.to_string();
                        } else {
                            println!("==> 设置上传应用无效，默认使用maven");
                            rel_args.exec = "maven".to_string();
                        }
                    }
                    _ => {
                        println!("warning:无效的参数{}:{}", var_name, var_value)
                    }
                }
                println!("item->:{}", item)
            } else {
                return Err(format!("==>错误的参数格式:{},请使用--name=xxxx", item));
            }
        }

        Ok(rel_args)
    }
    pub fn valid(&self) -> Result<(), String> {
        if self.url.is_empty() {
            return Err("请指定仓库地址".to_string());
        }
        if self.user.is_empty() {
            return Err("请指定用户名".to_string());
        }
        if self.pass.is_empty() {
            return Err("请指定用户密码".to_string());
        }
        if self.repo.is_empty() {
            return Err("请指定仓库名称".to_string());
        }
        Ok(())
    }
}
